#include <stdio.h>
#include <math.h>
//思路：先计算出n所在的档位，然后计算出n所在档位前的总的数有多少，最后计算出n是所在档位的第几个数，最后计算出n是第几位数，再把n分解出来，就可以了
int solve(int k)
{
    double sum1 = 0;
    int i = 1;
    int flag;
    double sum0 = 0;
    while (1)
    {
        double p1 = pow(10, i - 1); // 10的i-1次方，i默认是1，所以默认是10的0次方，也就是1
        sum1 += 9 * p1 * i;         //一开始sum1是9*1*1=9，对应了1-9一共9个数。i=2时，p1会等于10，9*10*2=180，对应了10-99分解完以后一共180个数，再加上sum1之前的，表示1-99分解完会有180+9=189个数。以此类推
        if (sum1 >= k)              //如果此时sum1大于等于k，说明k在sum1的这个档位之前的那个档位
        {
            flag = sum0; // sum0表示sum1前面的那个档位
            break;
        }
        sum0 = sum1; // sum0表示sum1前面的那个档位
        i++;
    }

    double kyusum0decha = k - sum0;
    // printf("k与sum0的差：kyusum0decha=%d\n", kyusum0decha);
    double bzd1 = (kyusum0decha - 1) / i;
    // printf("这个数(分解前)是这个档位的第一个数的后面的第几个数=%d\n", bzd1);
    double bzd2 = (int)(kyusum0decha - 1) % i;
    // printf("这个数(分解后)是分解前的这个数的第几位数=%d\n", bzd2);

    double bzd3 = pow(10, i - 1) + bzd1;
    // printf("这个数(分解前)是%d\n", bzd3);
    double bzd4 = (int)(bzd3 / pow(10, i - 1 - bzd2)) % 10;
    // printf("这个数(分解后)的第%d个数(就是要求的数)是%d\n", bzd2, bzd4);

    return (int)bzd4;
}
int main(int argc, char const *argv[])
{
    // printf("--------------------------\n");
    // printf("Hello World!\n");
    // printf("以下为输出↓\n");
    // printf("\n");

    int k = 0;
    scanf("%d", &k);
    int out = solve(k);
    printf("输出结果为：%d", out);

    // printf("\n");
    // printf("--------------------------\n");
}